/**
 * @author Thomas Pfeiffer
 * @file   INortel.h
 * @brief  Declaration of the Interface INortel.
 */
#ifndef INORTEL_H
#define INORTEL_H

#include <string>

/**
 * @class INortel
 * @brief Interface which is used by the company Nortel.
 * The INortel is an Interface which declares the functions
 * as wished by the company Nortel.
 */
class INortel {
public:

	/**
	 * @enum  TEncoding
	 * @brief Determines which Crypto algorithms should be used.
	 */
	enum TEncoding {
		eRSA,
		eCaesar
	};

	/**
	 * @brief Destructor of INortel
	 * Pure virtual destructor so that the destructor of
	 * inherited classes is called.
	 */
	virtual ~INortel() {};

	/**
	 * @brief Encrypts a file and stores the result in another file
	 * @param enc Determines which Crypto algorithm should be used.
	 * @param fileName The file to be encrypted.
	 * The function uses the CrypterFactor to instantiate a crypto algorithm 
	 * object depending on the parameter enc. It then tries to open and read
	 * the whole file and encrypts it with the first instantiated crypto
	 * algorithm. After encrypting it stores the data in a file with the name
	 * fileName plus a suffix which is specified by the crypto algorithm.
	 * @throws std::Exception If an error happens when opening, closing or reading a file.
	 */
	virtual void Encipher(TEncoding enc, std::string const & fileName) = 0;
		
	/**
	 * @brief Decrypts a file and stores the result in another file
	 * @param enc Determines which Crypto algorithm to be used.
	 * @param fileName The file to be decrypted.
	 * The function uses the CrypterFactor to instantiate a crypto algorithm 
	 * object depending on the parameter enc. It then tries to open and read
	 * the whole file and encrypts it with the first instantiated crypto
	 * algorithm. After decrypting it stores the data in a file with the name
	 * fileName minus the suffix which is specified by the crypto algorithm. (If the filename has that suffix)
	 * @throws std::Exception If an error happens when opening, closing or reading a file.
	 */
	virtual void Decipher(TEncoding enc, std::string const & fileName) = 0;
};

#endif